#include "RBTree.hpp"
#include "MyMap.hpp"
#include "MySet.hpp"
#include <vector>
#include <ctime>
#include <cstdlib>

void TestMap()
{
    yfy::map<string, string> dict;
    dict.Insert(make_pair("sort", "排序"));
    dict.Insert(make_pair("string", "字符串"));
    dict.Insert(make_pair("debug", "找虫子"));
    dict.Insert(make_pair("set", "集合"));
    dict["make"];
    dict["debug"] = "找缺陷";
    dict["insert"] = "插入";
    yfy::map<string, string>::iterator it = dict.begin();
    while(it != dict.end())
    {
        cout << it->first << ":" << it->second << endl;
        ++it;
    }
}

void TestSet()
{
    yfy::set<int> s;
    s.Insert(1);
    s.Insert(3); 
    s.Insert(7);
    s.Insert(2);
    s.Insert(12);
    s.Insert(22);
    s.Insert(2);
    s.Insert(23);
    s.Insert(-2);
    s.Insert(-9);
    s.Insert(30);

    yfy::set<int>::iterator it = s.begin();
    while(it != s.end())
    {
        cout << *it << " ";
        ++it;
    }
    cout << endl;
    for(auto e: s)
    {
        cout << e << " ";
    }
    cout << endl;
}

int main()
{
    TestSet();
    TestMap();
    return 0; 
}


// int main()
// {
//     //int a[] = {16, 3, 7, 11, 9, 26, 18, 14, 15};
//     // int a[] = {4, 2, 6, 1, 3, 5, 15, 7, 16, 14};
//     RBTree<int, int> t1;
//     vector<int> a(1000000);
//     srand((unsigned long)time(0));
//     for(size_t i = 0; i < 10000; i++)
//     {
//         a.push_back(rand());
//     }
//     for(auto e: a)
//     {
//         t1.Insert(make_pair(e, e));
//         if(!t1.IsBalance())
//         {
//             cerr << "not balance" << endl;
//             break;
//         }
//     }
//  	//t1.InOrder();
//     //cout << t1.IsBalance() << endl;
//     return 0;
// }